<?php

class BigUploads extends Base{
    private $filepath = './res/upload'; //上传目录
    private $tmpPath;  //PHP文件临时目录
    private $blobNum; //第几个文件块
    private $totalBlobNum; //文件块总数
    private $fileName; //文件名
	private $out_file;
 
 
    public function __construct(){
        
    }
	
	function setDir($dir){
		if(!is_dir($dir)){
			return false;
		}
		$this->filepath = $dir;
		return $this->filepath;
	}
    
	function init($tmpPath,$blobNum,$totalBlobNum,$fileName){
		$this->tmpPath =  $tmpPath;
		
        $this->blobNum =  $blobNum;
        $this->totalBlobNum =  $totalBlobNum;
		

		
		$encode = mb_detect_encoding($fileName, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5')); 
		$this->fileName = mb_convert_encoding($fileName, 'GB2312', $encode);
         
        $this->moveFile();
        $this->fileMerge();
	}
    //判断是否是最后一块，如果是则进行文件合成并且删除文件块
    private function fileMerge(){
        if($this->blobNum == $this->totalBlobNum){
            $blob = '';
			
			$fg  = explode('.',$this->fileName);
			$ext = end($fg);
			
			$file_name = '';
			while(true){
				$file_name = time().'_'.rand(1000,9999).'.'.$ext;
				if(!file_exists($this->filepath.'/'. $file_name)){
					break;
				}
				break;
			}
			
			$this->out_file = $this->filepath.'/'. $file_name;
			
            for($i=1; $i<= $this->totalBlobNum; $i++){
                $blob = file_get_contents($this->filepath.'/'. $this->fileName.'__'.$i);
                file_put_contents($this->out_file,$blob,FILE_APPEND);
            }
			
            $this->deleteFileBlob();
        }
    }
     
   //删除文件块
    private function deleteFileBlob(){
        for($i=1; $i<= $this->totalBlobNum; $i++){
            @unlink($this->filepath.'/'. $this->fileName.'__'.$i);
        }
    }
     
    //移动文件
    private function moveFile(){
        $this->touchDir();
        $filename = $this->filepath.'/'. $this->fileName.'__'.$this->blobNum;
		
        move_uploaded_file($this->tmpPath,$filename);
    }
     
    //API返回数据
    public function apiReturn(){
		
        if($this->blobNum == $this->totalBlobNum){
			if(!empty($this->out_file) && file_exists($this->out_file)){
				
				return $this->out_file;
			}
        }else{
			if(file_exists($this->filepath.'/'. $this->fileName.'__'.$this->blobNum)){
				return false;
			}
        }
       return false;
    }
     
    //建立上传文件夹
    private function touchDir(){
        if(!file_exists($this->filepath)){
            return mkdir($this->filepath);
        }
    }
}
